class Solution
{
public:
    bool isEscapePossible(vector<vector<int>> &blocked, vector<int> &source, vector<int> &target)
    {
        constexpr long long size = 1000000LL;
        int blockLimit = blocked.size() * (blocked.size() - 1) / 2;
        auto encodeCoordinate = [](int x, int y) -> long long
        {
            return x * size + y;
        };
        unordered_set<long long> blockedOrVisited;
        for (auto &block : blocked)
        {
            blockedOrVisited.insert(encodeCoordinate(block[0], block[1]));
        }
        queue<array<int, 2>> srcQ;
        queue<array<int, 2>> dstQ;
        srcQ.push({source[0], source[1]});
        dstQ.push({target[0], target[1]});
        dstQ.push({target[0], target[1]}); // 应对只有一条路的特殊用例，对其他的用例无影响
        blockedOrVisited.insert(encodeCoordinate(source[0], source[1]));
        blockedOrVisited.insert(encodeCoordinate(target[0], target[1]));
        int srcVisitedCount = 1;
        int dstVisitedCount = 1;
        while (!dstQ.empty() && !srcQ.empty())
        {
            auto [srcX, srcY] = srcQ.front();
            srcQ.pop();
            if (srcX > 0)
            {
                if (srcX - 1 == target[0] && srcY == target[1])
                {
                    return true;
                }
                else if (!blockedOrVisited.count(encodeCoordinate(srcX - 1, srcY)))
                {
                    srcQ.push({srcX - 1, srcY});
                    blockedOrVisited.insert(encodeCoordinate(srcX - 1, srcY));
                    ++srcVisitedCount;
                }
            }
            if (srcX < size - 1)
            {
                if (srcX + 1 == target[0] && srcY == target[1])
                {
                    return true;
                }
                else if (!blockedOrVisited.count(encodeCoordinate(srcX + 1, srcY)))
                {
                    srcQ.push({srcX + 1, srcY});
                    blockedOrVisited.insert(encodeCoordinate(srcX + 1, srcY));
                    ++srcVisitedCount;
                }
            }
            if (srcY > 0)
            {
                if (srcX == target[0] && srcY - 1 == target[1])
                {
                    return true;
                }
                else if (!blockedOrVisited.count(encodeCoordinate(srcX, srcY - 1)))
                {
                    srcQ.push({srcX, srcY - 1});
                    blockedOrVisited.insert(encodeCoordinate(srcX, srcY - 1));
                    ++srcVisitedCount;
                }
            }
            if (srcY < size - 1)
            {
                if (srcX == target[0] && srcY + 1 == target[1])
                {
                    return true;
                }
                else if (!blockedOrVisited.count(encodeCoordinate(srcX, srcY + 1)))
                {
                    srcQ.push({srcX, srcY + 1});
                    blockedOrVisited.insert(encodeCoordinate(srcX, srcY + 1));
                    ++srcVisitedCount;
                }
            }
            auto [dstX, dstY] = dstQ.front();
            dstQ.pop();
            if (dstX > 0)
            {
                if (dstX - 1 == source[0] && dstY == source[1])
                {
                    return true;
                }
                else if (!blockedOrVisited.count(encodeCoordinate(dstX - 1, dstY)))
                {
                    dstQ.push({dstX - 1, dstY});
                    blockedOrVisited.insert(encodeCoordinate(dstX - 1, dstY));
                    ++dstVisitedCount;
                }
            }
            if (dstX < size - 1)
            {
                if (dstX + 1 == source[0] && dstY == source[1])
                {
                    return true;
                }
                else if (!blockedOrVisited.count(encodeCoordinate(dstX + 1, dstY)))
                {
                    dstQ.push({dstX + 1, dstY});
                    blockedOrVisited.insert(encodeCoordinate(dstX + 1, dstY));
                    ++dstVisitedCount;
                }
            }
            if (dstY > 0)
            {
                if (dstX == source[0] && dstY - 1 == source[1])
                {
                    return true;
                }
                else if (!blockedOrVisited.count(encodeCoordinate(dstX, dstY - 1)))
                {
                    dstQ.push({dstX, dstY - 1});
                    blockedOrVisited.insert(encodeCoordinate(dstX, dstY - 1));
                    ++dstVisitedCount;
                }
            }
            if (dstY < size - 1)
            {
                if (dstX == source[0] && dstY + 1 == source[1])
                {
                    return true;
                }
                else if (!blockedOrVisited.count(encodeCoordinate(dstX, dstY + 1)))
                {
                    dstQ.push({dstX, dstY + 1});
                    blockedOrVisited.insert(encodeCoordinate(dstX, dstY + 1));
                    ++dstVisitedCount;
                }
            }
            if (srcVisitedCount > blockLimit && dstVisitedCount > blockLimit)
            {
                return true;
            }
        }
        return false;
    }
};